/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import util.HibernateUtil;

/**
 *
 * @author Ozita
 */
public class ControladorPersonas {

    public Persona save(Persona p) {
        try{
        SessionFactory sf = HibernateUtil.getSessionFactory();  //re recupera de la base de datos
        Session session = sf.openSession(); 
        session.beginTransaction();   //se inicia una nueva transaccion
        int id = (int) session.save(p);   //save: metodo generico para guardar datos, devuelve el entero que se asigno a esa persona
        p.setId(id);
        session.getTransaction().commit();
        session.close();
        return p;
    }catch(Exception e){
        return p;
        // control de errores
    }
    }
    
    public List< Persona> list() {
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session session = sf.openSession(); 
        List lista = session.createQuery("from Persona").list();  //recupera todo lo que esta en persona, devuelve una lista de objetos de personas
        session.close();
        return lista;
    }

    public Persona read(int id) {   //buscar una persona
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session session = sf.openSession();
        Persona p = (Persona) session.get(Persona.class, id);  //mando el tipo de la clase, y mando el parametro con el que se va a filtrar y me devuelve esa persona
        session.close();
        return p;
    }
    public Persona update(Persona p) {  //actualizar los datos de esa persona
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();
        session.merge(p);  //actualiza los datos de esa persona
        session.getTransaction().commit();
        session.close();
        return p;
     }
 
    public void delete(Persona p) {
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();
        session.delete(p);
        session.getTransaction().commit();
        session.close();
    }
    
    
}
